/**
 * 初始化粒子
 * @param {number} len 
 * @returns {{x:number,y:number,vx:number,vy:number,ax:number,ay:number,e:number}[]}
 */
function initPointList(len) {
  len = len ? len : 1000;
  var list = new Array(len);

  for (let i = 0; i < len; i++) {
    var p = {
      x: 0, y: 0,
      vx: 0, vy: 0,
      ax: 0, ay: 0
    };
    // var d = Math.sqrt(len) | 0;
    // p.x = p.ox = Math.floor(i % d * 10);
    // p.y = p.oy = Math.floor(i / d * 10);
    // p.vx = 0;
    // p.vy = 0;
    // p.vx = (Math.random() - 1) * 100;
    // p.vy = (Math.random() - 1) * 100;
    p.e = i % 2 == 1 ? true : false; // 电荷
    list[i] = p;
    p.x = (Math.random() - 0.5) * 300;
    p.y = (Math.random() - 0.5) * 300;
  }
  return list;
}
var { Point } = require("./Point")
/**
 * 初始化粒子
 * @param {number} len 
 * @returns {{x:number,y:number}[]}
 */
function initPoints(len) {
  len = len ? len : 1000;
  var list = new Array(len);
  for (let i = 0; i < len; i++) {
    list[i] = {
      x: (Math.random() - 0.5) * 300,
      y: (Math.random() - 0.5) * 300,
    };
  }
  // @ts-ignore
  return list;
}

function initStep(list) {
  // var list = initPointList(len)
  for (let index = 0; index < list.length; index++) {
    // const element = list[index];
    list[index].ax = 0;
    list[index].ay = 0;
    var f = 0;

    for (let allParticle = 0; allParticle < list.length; allParticle++) {
      // const element = list[allParticle];
      var plen = Point.len(list[index], list[allParticle])
      var wayx = list[allParticle].x - list[index].x;
      var wayy = list[allParticle].y - list[index].y;
      var f = 1 / plen / plen - 0.5;
      list[index].ax += wayx / plen * f;
      list[index].ay += wayy / plen * f;
    }

  }
  for (let index = 0; index < list.length; index++) {
    // const element = array[index];
    list[index].vx += list[index].ax
    list[index].vy += list[index].ay
    list[index].x += list[index].vx * 0.2
    list[index].y += list[index].vy * 0.2
  }
}
module.exports = { initPointList, initPoints, initStep };

